// 区间交集三  未完成， 注意不是划分，而是选择

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 5;
const int INF = 0x3f3f3f3f;
int n, m;
ll a[N], dp[2][N]; // 只保存上一行和当前行
int main() {
  int total = 0;
  while (cin >> a[++total])
    ;
  n = total - 1;
  m = a[total];

  for (int i = 0; i <= n; i++)
    dp[0][i] = 0, dp[1][i] = 0; // 关键！此题答案只允许正值

  for (int i = 1, k = 1; i <= m; i++, k ^= 1) // 分为i段，k为两行之间的切换
  {
    dp[k][i - 1] = -INF; // i==j时，杜绝与前一元素共伍
    ll maxpre = -INF;    // maxpre记录上一行的最大值
    for (int j = i; j <= n - m + i; j++) {
      maxpre = max(maxpre, dp[k ^ 1][j - 1]); // 随时更新上一行最大值
      dp[k][j] = max(dp[k][j - 1], maxpre) + a[j]; //*对情况1、2的选择
    }
  }
  ll ans = -INF;
  for (int i = m; i <= n; i++) // 找到第m行的最大值，即为答案
    ans = max(ans, dp[m & 1][i]);
  printf("%lld\n", ans);
  return 0;
}